package com.tcc.etec.mecashow.activity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Point;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.tcc.etec.mecashow.R;
import com.tcc.etec.mecashow.objetos.Pergunta;
import com.tcc.etec.mecashow.util.Utils;

public class PerguntaActivity extends Activity implements OnClickListener {

	public static final String TEM_AJUDA = "temAjuda";
	public static final String LISTA_DE_ESCONDIDOS = "listaDeEscondidos";
	public static final String PONTUACAO = "PONTUACAO";
	public static final String QTD_PULO = "QTD_PULO";
	public static final String QTD_AJUDA = "QTD_AJUDA";
	public static final String PERGUNTA = "PERGUNTA"; 
	
	private TextView textViewOpcao1;
	private TextView textViewOpcao2;
	private TextView textViewOpcao3;
	private TextView textViewOpcao4;

	private String opcaoSelecionada;
	private Pergunta pergunta;
	
	private ArrayList<Integer> escondidoComAjuda;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_pergunta);

		int pontuacao = getIntent().getIntExtra(PONTUACAO, 0);
		int qtdPulo = getIntent().getIntExtra(QTD_PULO, 0);
		int qtdAjuda = getIntent().getIntExtra(QTD_AJUDA, 0);
		pergunta = (Pergunta) getIntent().getSerializableExtra(PERGUNTA);

		TextView textViewPontos = (TextView) findViewById(R.id.txtPontos);
		textViewPontos.setText(String.valueOf(pontuacao));

		TextView textViewPulos = (TextView) findViewById(R.id.txtQtdPulo);
		textViewPulos.setText(String.valueOf(qtdPulo));

		TextView textViewAjuda = (TextView) findViewById(R.id.txtQtdAjuda);
		textViewAjuda.setText(String.valueOf(qtdAjuda));

		TextView textViewPergunta = (TextView) findViewById(R.id.textViewPergunta);
		textViewPergunta.setText(pergunta.getTexto());

		Collections.shuffle(pergunta.getListaOpcoes()); // Embaralha as opções de resposta

		textViewOpcao1 = (TextView) findViewById(R.id.textViewOpcao1);
		textViewOpcao1.setText(pergunta.getListaOpcoes().get(0));
		textViewOpcao1.setOnClickListener(this);

		textViewOpcao2 = (TextView) findViewById(R.id.textViewOpcao2);
		textViewOpcao2.setText(pergunta.getListaOpcoes().get(1));
		textViewOpcao2.setOnClickListener(this);

		textViewOpcao3 = (TextView) findViewById(R.id.textViewOpcao3);
		textViewOpcao3.setText(pergunta.getListaOpcoes().get(2));
		textViewOpcao3.setOnClickListener(this);

		textViewOpcao4 = (TextView) findViewById(R.id.textViewOpcao4);
		textViewOpcao4.setText(pergunta.getListaOpcoes().get(3));
		textViewOpcao4.setOnClickListener(this);

		Button botaoPular = (Button) findViewById(R.id.botaoPular);
		if (qtdPulo == 0) {
			botaoPular.setEnabled(false);
		}
		botaoPular.setOnClickListener(this);

		Button botaoAjuda = (Button) findViewById(R.id.botaoAjuda);
		if (qtdAjuda == 0) {
			botaoAjuda.setEnabled(false);
		}
		botaoAjuda.setOnClickListener(this);
	}

	@SuppressWarnings("deprecation")
	@Override
	protected void onStart() {
		super.onStart();

		final Display display = getWindowManager().getDefaultDisplay();
        final Point point = new Point();
        display.getSize(point);
        getWindow().getDecorView().getRootView().setBackgroundDrawable(new BitmapDrawable(getResources(), Utils.getBackgroundImage(getResources(), R.drawable.papirus, point.x, point.y)));
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		Intent intent = getIntent();
		escondidoComAjuda = intent.getIntegerArrayListExtra(LISTA_DE_ESCONDIDOS);
		if (intent.getBooleanExtra(TEM_AJUDA, false) && escondidoComAjuda != null) {
			for (Integer index : escondidoComAjuda) {
				esconder(index);
			}
			Button botaoAjuda = (Button) findViewById(R.id.botaoAjuda);
			botaoAjuda.setEnabled(false);
		} else {
			intent.putExtra(TEM_AJUDA, false);
		}
	}

	@Override
	public void onBackPressed() {
		// não deve permitir o botão voltar
	}

	@Override
	public void onClick(final View view) {
		setEstadoDaOpcao(view);

		AlertDialog dialog = new AlertDialog.Builder(this).create();
		dialog.setCancelable(false);
		dialog.setTitle(getString(R.string.txt_esta_certo));
		
		switch (view.getId()) {
		case R.id.textViewOpcao1:
			opcaoSelecionada = pergunta.getListaOpcoes().get(0);
			break;
		case R.id.textViewOpcao2:
			opcaoSelecionada = pergunta.getListaOpcoes().get(1);
			break;
		case R.id.textViewOpcao3:
			opcaoSelecionada = pergunta.getListaOpcoes().get(2);
			break;
		case R.id.textViewOpcao4:
			opcaoSelecionada = pergunta.getListaOpcoes().get(3);
			break;
		case R.id.botaoPular:
			dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.txt_btn_sim),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {
							setResult(772, getIntent());
							PerguntaActivity.this.finish();
						}
					});
			dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.txt_btn_nao),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {
							// Não faz nada.
						}
					});

			dialog.show();
			return;
		case R.id.botaoAjuda:
			dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.txt_btn_sim),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {
							resolverAjuda();
							Intent intent = getIntent();
							intent.putExtra(TEM_AJUDA, true);
							intent.putIntegerArrayListExtra(LISTA_DE_ESCONDIDOS, escondidoComAjuda);
							Button botaoAjuda = (Button) findViewById(R.id.botaoAjuda);
							botaoAjuda.setEnabled(false);
						}
					});
			dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.txt_btn_nao),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {

						}
					});

			dialog.show();
			return;
			
		case R.id.botaoParar:
			dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.txt_btn_sim),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {
							setResult(773, getIntent());
							PerguntaActivity.this.finish();
						}
					});
			dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.txt_btn_nao),
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int buttonId) {
							dialog.dismiss();
						}
					});

			dialog.show();
			return;
		}

		dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.txt_btn_sim),
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int buttonId) {
						Intent intent = getIntent();
						if (opcaoSelecionada.equals(pergunta.getOpcaoCorreta())) {
							setResult(771, intent);
						} else {
							setResult(770, intent);
						}
						PerguntaActivity.this.finish();
					}
				});
		dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.txt_btn_nao),
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int buttonId) {
						setEstadoDaOpcao(view);
					}
				});

		dialog.show();

	}

	private void resolverAjuda() {
		int indiceOpcaoCorreta = pergunta.getListaOpcoes().indexOf(
				pergunta.getOpcaoCorreta());
		escondidoComAjuda = new ArrayList<Integer>();
		int count = 2;
		while (count != 0) {
			int index = new Random().nextInt(3);
			if (index != indiceOpcaoCorreta
					&& !escondidoComAjuda.contains(index)) {
				esconder(index);
				escondidoComAjuda.add(index);
				count--;
			}
		}

	}

	private void esconder(int index) {
		switch (index) {
		case 0:
			textViewOpcao1.setVisibility(View.INVISIBLE);
			break;
		case 1:
			textViewOpcao2.setVisibility(View.INVISIBLE);
			break;
		case 2:
			textViewOpcao3.setVisibility(View.INVISIBLE);
			break;
		case 3:
			textViewOpcao4.setVisibility(View.INVISIBLE);
			break;
		}
	}

	private void setEstadoDaOpcao(View textView) {
		if (textView.isSelected()) {
			textView.setSelected(false);
		} else {
			textView.setSelected(true);
		}
	}
	
}
